#include <stdio.h>
#define MaxSize 10
typedef struct SqList
{
    // 表内容
    int data[MaxSize];
    // 表长
    int length;
} SqList;

void InitList(SqList &L)
{
    int i = 0;
    for (; i < MaxSize; i++)
    {
        L.data[i] = 0;
    };
    L.length = 0;
};

// 增
bool ListInsert(SqList &L, int i, int e)
{
    if (i < 1 || i > L.length + 1 || L.length >= MaxSize) // 判断增加的内容是否合法
    {
        return false;
    }
    for (int j = L.length; j >= i; j--) // 将后面的元素后置
    {
        L.data[j] = L.data[j - 1];
    }
    L.data[i - 1] = e; // 插入元素
    L.length++;        // 长度+1
    return true;
}

// 删
bool ListDelete(SqList &L, int i, int &e)
{
    if (i < 1 || i > L.length || L.length == 0) // 判断删除的内容是否合法
    {
        return false;
    }
    e = L.data[i - 1];                 // 删除的内容
    for (int j = i; j < L.length; j++) // 将后面的元素前置
    {
        L.data[j - 1] = L.data[j];
    }
    L.length--; // 长度-1
    return true;
}

// 查的菜单
int FindMenu()
{
    printf("1. 按位查找 | GetElem\n2. 按值查找 | LocateElem\n");
    int i = 1;
    scanf("%d", &i);
    return i;
}

// 查-按位查找
int GetElem(SqList L, int i)
{
    return L.data[i - 1];
}

// 查-按值查找
int LocateElem(SqList L, int e)
{
    for (int i = 0; i < L.length; i++)
    { // 遍历到值相等的位置
        if (L.data[i] == e)
        {
            return i + 1;
        }
    }
    return 0;
}

void ForPrintf(SqList L)
{
    for (int i = 0; i < L.length; i++)
    {
        printf("L.data[%d]=%d\n", i, L.data[i]);
    };
    printf("length=%d\n", L.length);
}

int main()
{
    // 创建表
    SqList L;
    // 初始化
    InitList(L);
    // 插入内容
    ListInsert(L, 1, 3);
    ListInsert(L, 2, 5);
    ListInsert(L, 3, 9);

    ForPrintf(L);

    // 操作选择
    int choose = 1;
    printf("1.增 | add\n2.删 | del\n3.改 | upd\n4.查 | sel\n");
    scanf("%d", &choose);

    switch (choose)
    {
    case 1: // 增
    {
        ListInsert(L, 4, 1);
        ListInsert(L, 5, 6);
        break;
    }
    case 2:
    {
        int e = -1;
        ListDelete(L, 1, e);
        printf("删除 | del : %d\n", e);
        break;
    }
    case 3:
    {
        L.data[1] = 5;
        break;
    }
    case 4:
    {
        choose = FindMenu();
        if (choose == 1)
        {
            printf("L.data[0]=%d\n", GetElem(L, 1));
        }
        else if (choose == 2)
        {
            printf("L.data[%d]=9\n", LocateElem(L, 9) - 1);
        }
        break;
    }
    }
    // 输出表内容
    ForPrintf(L);
    return 0;
};